using System;

namespace StudentDemo
{
    /// <summary>
    /// 学生类，封装学生的基本信息和相关操作
    /// </summary>
    public class Student
    {
        // 私有字段（封装学生信息）
        private string _id;       // 学号
        private string _name;     // 姓名
        private int _age;         // 年龄
        private double _score;    // 成绩

        // 构造函数（初始化学生信息）
        public Student(string id, string name, int age, double score)
        {
            // 简单数据验证
            _id = !string.IsNullOrEmpty(id) ? id : throw new ArgumentException("学号不能为空");
            _name = !string.IsNullOrEmpty(name) ? name : throw new ArgumentException("姓名不能为空");
            _age = age > 0 ? age : throw new ArgumentException("年龄必须大于0");
            _score = score >= 0 && score <= 100 ? score : throw new ArgumentException("成绩必须在0-100之间");
        }

        // 属性（提供字段的安全访问）
        public string Id => _id;          // 学号只读
        public string Name => _name;      // 姓名只读
        public int Age 
        { 
            get => _age; 
            set => _age = value > 0 ? value : throw new ArgumentException("年龄必须大于0"); 
        }
        public double Score 
        { 
            get => _score; 
            set => _score = value >= 0 && value <= 100 ? value : throw new ArgumentException("成绩必须在0-100之间"); 
        }

        /// <summary>
        /// 显示学生完整信息
        /// </summary>
        public void ShowInfo()
        {
            Console.WriteLine($"学号：{_id}");
            Console.WriteLine($"姓名：{_name}");
            Console.WriteLine($"年龄：{_age}");
            Console.WriteLine($"成绩：{_score}");
            Console.WriteLine("---------------------");
        }

        /// <summary>
        /// 判断学生是否及格（成绩>=60）
        /// </summary>
        /// <returns>及格返回true，否则返回false</returns>
        public bool IsPassed()
        {
            return _score >= 60;
        }

        /// <summary>
        /// 重写ToString方法，返回简洁的学生信息
        /// </summary>
        /// <returns>学生信息字符串</returns>
        public override string ToString()
        {
            return $"[{_id}] {_name}（{_age}岁）- 成绩：{_score}分";
        }
    }
}